package com.example.notepad.adapter;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;


import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.notepad.MainActivity;
import com.example.notepad.R;
import com.example.notepad.bean.NotePad;

import java.util.ArrayList;
import java.util.List;


public class NoteListAdapter extends RecyclerView.Adapter<NoteListAdapter.VH> {

    // 存储笔记数据的列表
    List<NotePad> list =new ArrayList<>();

    /**
     * VH 是一个内部类，用于定义 RecyclerView 的列表项的视图控件。
     */
    class VH extends RecyclerView.ViewHolder{
        TextView contentTV; // 显示笔记内容的文本视图
        TextView timeTV; // 显示笔记时间的文本视图
        TextView titleTV; // 显示笔记标题的文本视图
        /**
         * VH 构造方法，初始化视图控件。
         *
         * @param itemView 列表项的根视图
         */
        public VH(@NonNull View itemView) {
            super(itemView);
            titleTV = itemView.findViewById(R.id.titleTV);
            contentTV = itemView.findViewById(R.id.contentTV);
            timeTV = itemView.findViewById(R.id.timeTV);
        }
    }

    /**
     * 创建列表项的视图并返回对应的视图持有者。
     *
     * @param parent   父视图组
     * @param viewType 视图类型
     * @return VH 视图持有者
     */
    @NonNull
    @Override
    public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View View = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false);
        return new VH(View);
    }

    /**
     * 更新适配器数据。
     *
     * @param notePadList 新的笔记数据列表
     */
    public void update(List<NotePad> notePadList) {
        //清除列表
        this.list.clear();
        //数据全部添加到列表
        this.list.addAll(notePadList);
        //刷新
        notifyDataSetChanged();
    }

    /**
     * 绑定数据到列表项的视图上。
     *
     * @param holder   视图持有者
     * @param position 列表项的位置
     */
    @Override
    public void onBindViewHolder(@NonNull VH holder, int position) {
        // 获取到对应位置的笔记数据
        NotePad notePad = list.get(position);

        // 将数据绑定到视图上
        holder.titleTV.setText(notePad.getTitle());
        holder.contentTV.setText(notePad.getContent());
        holder.timeTV.setText(notePad.getTime());

        // 设置列表项的长点击监听器
        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                showDeleteDialog(notePad,v.getContext());
                return false;
            }
        });
    }

    private void showDeleteDialog(NotePad notePad, Context context) {
        AlertDialog alertDialog = new AlertDialog.Builder(context)
                .setTitle("删除")
                .setMessage("确定删除吗？")
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(context,"取消",Toast.LENGTH_LONG).show();
                    }
                })
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        MainActivity activity = (MainActivity) context;

                        activity.myDbHelper.delete(notePad);
                        activity.findAll();
                        Toast.makeText(activity,"删除成功",Toast.LENGTH_LONG).show();
                    }
                })
                .create();
        alertDialog.show();
    }

    /**
     * 获取列表中的项目数量。
     *
     * @return 列表中的项目数量
     */
    @Override
    public int getItemCount() {
        return list.size();
    }
}
